package com.example.recursion;

import java.util.ArrayList;
import java.util.List;

/**
 * @Date 2022/7/7
 * @Created by Jonathan
 */
public class PrintAllSubSequence {
    public static void main(String[] args) {
        String str = "abc";
        System.out.println(sub(str));
    }


    private static List<String> sub(String str) {
        final char[] chars = str.toCharArray();
        List<String> ans = new ArrayList<>();
        process(chars, 0, "", ans);
        return ans;
    }

    /**
     * index此时来到的位置  要或者不要
     * 如果index来到了终止位置，把沿途锁形成的答案，放到ans中
     * 之前做出的选择就是path
     */
    private static void process(char[] str, int index, String path, List<String> ans) {
        if (index == str.length) {
            ans.add(path);
            return;
        }
        // 不要当前index位置的字符
        process(str, index + 1, path, ans);
        // 要当前index位置的字符
        String yes = path + str[index];
        process(str, index + 1, yes, ans);
    }
}
